package cn.marinda.resturants.service;

import cn.marinda.resturants.entity.Staff;
import cn.marinda.resturants.entity.Supplier;
import cn.marinda.resturants.global.Pages;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;

/** Supplier 供应商服务层
 * @author Marinda
 * @date 2021/11/30
 * @version 1.0
 *
 */
public interface SupplierService extends IService<Supplier> {

    /** 返回所有供应商
     *
     * @return 供应商
     */
    List<Supplier> queryList();


    /**
     * 选择uid
     *
     * @param uid uid
     * @return {@link Supplier}
     */
    Supplier selectUid(String uid);
    /** 根据菜品的uid来找到对应的供应商
     *
     * @param uid  uid
     *
     * @return 供应商
     * @author Marinda
     *
     *
     */

    @Select("select * from r_supplier where meal_uid = #{uid}")
    Supplier selectMealUid(String uid);

    /** 模糊查询供货商姓名来找到这个供货商
     *
     * @param name  姓名
     * @return 供货商
     *
     */

    @Select("select * from r_supplier where name like CONCAT('%',#{name},'%')")
    List<Supplier> selectLikeName(String name);

    /** 查询指定供应商的单价
     *
     * @param uid uid
     * @return 价格单价
     */
    @Select("select unit_price from r_supplier where uid = #{uid}")
    BigDecimal selectUnitPrice(String uid);

    /** 查询指定供应商的总价
     *
     * @param uid uid
     * @return 价格单价
     */
    @Select("select total_price from r_supplier where uid = #{uid}")
    BigDecimal selectTotalPrice(String uid);

    /** 查询指定范围内的所有单价区间供应商
     *
     * @param startUnitPrice 开始单价
     * @param endUnitPrice 结束单价
     * @return 价格单价
     */
    List<Supplier> selectUnitPriceInterval(BigDecimal startUnitPrice, BigDecimal endUnitPrice);

    /** 查询指定范围内的所有价格区间供应商
     *
     * @param startTotalPrice 开始单价
     * @param endTotalPrice 结束单价
     * @return 指定范围内供应商
     */
    List<Supplier> selectTotalPriceInterval(BigDecimal startTotalPrice,BigDecimal endTotalPrice);


    /** 查询指定日期内上次进货时间区间
     *
     * @param startDateFormat 开始日期区间
     * @param endDateFormat 结束日期区间
     * @return 指定范围内供应商
     */
    List<Supplier> selectUpDateInterval(String startDateFormat,String endDateFormat);


    /** 查询指定日期内最新进货时间区间
     *
     * @param startDateFormat 开始日期区间
     * @param endDateFormat 结束日期区间
     * @return 指定范围内供应商
     */
    List<Supplier> selectNewDateInterval(String startDateFormat,String endDateFormat);


    /** 查询指定上次进货日期的供应商
     *
     * @param dateFormat 日期
     * @return 指定范围内供应商
     */
    Supplier selectUpDateById(String dateFormat);

    /** 查询指定最新进货日期的供应商
     *
     * @param dateFormat 日期
     * @return 指定范围内供应商
     */
    Supplier selectNewDateById(String dateFormat);

    /** 添加一名供应商
     *
     * @param supplier 供应商
     * @return 结果
     */
    boolean addSupplier(Supplier supplier);

    /** 删除一名供应商
     *
     * @param uid 供应商uid
     * @return 结果
     */
    boolean removeSupplier(String uid);

    /** 乐观锁修改供应商
     *
     * @param supplier 供应商
     * @return 结果
     */
    boolean updateSupplier(Supplier supplier);

    /** 根据uid查询一名供应商
     *
     * @param uid 供应商uid
     * @return 供应商
     */
    Supplier selectByUid(String uid);

    /** 分页查询
     *
     * @param page 分页
     * @return 分页
     */
    IPage<Supplier> selectPages(Pages<?> page);
}
